/**
 * 
 */
package com.scpii.universal.service.impl;

import java.util.ArrayList;
import java.util.List;

import javax.annotation.Resource;

import org.springframework.stereotype.Service;

import com.googlecode.ehcache.annotations.Cacheable;
import com.scpii.universal.constant.GenericConstants;
import com.scpii.universal.dto.SortColumnsDto;
import com.scpii.universal.hibernate.dao.DataSortDao;
import com.scpii.universal.hibernate.dao.SortColumnsDao;
import com.scpii.universal.hibernate.entity.AttributeTab;
import com.scpii.universal.hibernate.entity.DataSortTab;
import com.scpii.universal.hibernate.entity.SortColumnsTab;
import com.scpii.universal.service.CatelogService;
import com.scpii.universal.service.DataSortService;

/**
 * genericWeb
 * @author Taylor
 * 2012-7-8下午09:31:10
 */
@Service
public class DataSortServiceImpl extends BaseServiceImpl<DataSortTab, Integer>
		implements DataSortService {
	@Resource
	private DataSortDao dataSortDao;
	@Resource
	private SortColumnsDao sortColumnsDao;
	@Resource
	private CatelogService catelogService;

	@Resource
	public void setBaseDao(DataSortDao dataSortDao) {
		super.setBaseDao(dataSortDao);
	}

	@Override
	public List<SortColumnsDto> getSortColumnsByIds(int intViewId, int intCateId) {
		//被选择的排序字段
		List<DataSortTab> lstSelectedColumns = getSelectedSortColumns(intViewId);
		//全局排序字段
		List<SortColumnsTab> lstGlobalColumns = getGlobalSortColumns();
		//可用于排序的扩展属性
		List<AttributeTab> lstAttrs = catelogService.getAllAttributesByCateId(intCateId);
		return sortColumnsProcess(lstSelectedColumns, lstGlobalColumns, lstAttrs);
	}
	
	@Cacheable(cacheName=GenericConstants.GLOBAL_EHCACHE)
	private List<SortColumnsTab> getGlobalSortColumns() {
		return sortColumnsDao.getSortColumnsByTableName(GenericConstants.CONTENT_TABLE_NAME);
	}
	
	@Cacheable(cacheName=GenericConstants.CATELOG_EHCACHE)
	private List<DataSortTab> getSelectedSortColumns(int intViewId) {
		return dataSortDao.getSelectedSortColumns(intViewId, GenericConstants.OPTION_NO);
	}
	
	private List<SortColumnsDto> sortColumnsProcess(
			List<DataSortTab> lstSelectedColumns,
			List<SortColumnsTab> lstGlobalColumns, List<AttributeTab> lstAttrs) {
		List<SortColumnsDto> result = new ArrayList<SortColumnsDto>();
		SortColumnsDto sortColumnsDto;
		if (lstGlobalColumns != null) {
			for (SortColumnsTab sortColumnsTab : lstGlobalColumns) {
				sortColumnsDto = new SortColumnsDto(
						sortColumnsTab.getIntSortColumnId(),
						sortColumnsTab.getVarColumnDisplayName(),
						GenericConstants.OPTION_NO, GenericConstants.OPTION_NO,0);
				result.add(sortColumnsDto);
			}
		}
		if (lstAttrs != null) {
			for (AttributeTab attributeTab : lstAttrs) {
				sortColumnsDto = new SortColumnsDto(
						attributeTab.getIntAttriId(),
						attributeTab.getVarAttriName(),
						GenericConstants.OPTION_YES, GenericConstants.OPTION_NO,0);
				result.add(sortColumnsDto);
			}
		}
		if (lstSelectedColumns != null) {
			for (DataSortTab dataSortTab : lstSelectedColumns) {
				sortColumnsDto = new SortColumnsDto(
						dataSortTab.getIntSortColumnId(),
						dataSortTab.getIntIsAttr(),
						dataSortTab.getIntColumnOrder(),
						dataSortTab.getIntSortRule());
				for (SortColumnsDto unitDto : result) {
					if(sortColumnsDto.equals(unitDto)) {
						unitDto.setIntIsSelect(GenericConstants.OPTION_YES);
						unitDto.setIntColumnOrder(sortColumnsDto.getIntColumnOrder());
						unitDto.setIntSortRule(sortColumnsDto.getIntSortRule());
					}
				}
			}
		}
		return result;
	}
}
